import skill from "./Skill_btn_V";
const {ccclass, property} = cc._decorator;

@ccclass
export default class Skill_Learn extends cc.Component {

    @property({displayName: "最多可以学几个技能", tooltip: "最多可以学几个技能", type: cc.Float})
    skill_num: number = 4;

    /*
    如何获取学习好的技能的数据
    代码如下

    // 获取数据
    let s: string = cc.sys.localStorage.getItem("skill");
    // 将数据化为数组
    let sk: string[] = s.split(",");

    */



    @property({displayName: "skill脚本所在节点", tooltip: "skill脚本所在节点", type: skill})
    skill: skill = null;



    @property({displayName: "学习技能按钮数组", tooltip: "学习技能按钮数组", type: cc.Button})
    btn_sl: cc.Button[] = [];
    
    @property({displayName: "重置技能按钮", tooltip: "重置技能按钮", type: cc.Button})
    btn_reset: cc.Button = null;

    @property({displayName: "显示金币的文字", tooltip: "显示金币的文字", type: cc.Label})
    money_lb: cc.Label = null;

    @property({displayName: "学习技能的面板", tooltip: "学习技能的面板", type: cc.Node})
    UI: cc.Node = null;

    // 用来检测是否学满技能
    num: number = 0;

    // 金钱
    money: number = 0;

    onLoad () {
        // self变量
        let self = this;

        // for循环给每个学习技能按钮绑定事件
        for (let i = 0; i < this.btn_sl.length; i ++) {  
            this.btn_sl[i].node.on(cc.Node.EventType.TOUCH_START, function () {
                // 如果按钮启用
                if (self.btn_sl[i].getComponent(cc.Button).interactable == true) {
                    // 学习技能
                    self.learn(i);
                }
            }, this); 
        }

        // 给重置技能按钮绑定事件
        this.btn_reset.node.on(cc.Node.EventType.TOUCH_START, function () {
            // 如果按钮是启用的
            if (self.btn_reset.interactable == true) {
                // 删除数据
                cc.sys.localStorage.removeItem("skill");
                // 把每个按钮启用
                for (let i = 0; i < this.btn_sl.length; i ++) {
                    self.btn_sl[i].interactable = true;      
                    // 禁用所有使用技能按钮
                    self.skill.forbidden_all_btn();      
                }

                // 获取金币
                let money = cc.sys.localStorage.getItem("money");
                // -5000金币
                let m = Number(money) - 5000;
                // 存储
                cc.sys.localStorage.setItem("money", m);



                // 获取任务金币数据
                let t_m = cc.sys.localStorage.getItem("Task_money");
                // 如果为空
                if (t_m == null) {
                    // 存储
                    cc.sys.localStorage.setItem("Task_money", 5000);
                } else {
                    // 如果不为空
                    // 加上5000
                    let n = Number(t_m) + 5000;
                    // 存储
                    cc.sys.localStorage.setItem("Task_money", n);
                }



                cc.log("已经删除所有技能存储数据");
            }
        }, this);

        // 如果有数据
        if (cc.sys.localStorage.getItem("skill") != null) {
            // 检查并禁用按钮
            this.check_btn_inter();
        }

    }



    update () {
        this.num = 0;
        for (let i = 0; i < this.skill.skill_btn.length; i++) {            
            if (this.skill.skill_btn[i].node.active == true) {
                this.num ++;
            }
        }

        // 如果学满了技能
        if (this.num >= this.skill_num) {
            // 禁用所有按钮
            this.forbidden_all_btn();
            cc.log("学满了技能，并禁用了所有按钮");
        }

        // 检测是否学满技能


        // 获取金币
        let money = cc.sys.localStorage.getItem("money");
        // 如果没钱
        if (money == null) {
            this.money_lb.string = "金币：0";
            this.money = 0;
        }
        // 如果有钱
        else {
            this.money_lb.string = "金币：" + money;
            this.money = Number(money);
        }


        // 如果钱不够
        if (this.money < 5000) {
            // 禁用按钮
            this.btn_reset.interactable = false;
        }

        // 如果钱不够
        if (this.money < 2500) {
            // 禁用按钮
            this.btn_reset.interactable = false;
            this.forbidden_all_btn();
        }

    }



    // 禁用所有按钮
    forbidden_all_btn () {
        // 禁用
        for (let i = 0; i < this.btn_sl.length; i ++) {
            this.btn_sl[i].interactable = false;      
        }
    }




    // 检测并禁用已经学习过技能的按钮
    check_btn_inter () {
        // 获取数据
        let s: string = cc.sys.localStorage.getItem("skill");
        // 将数据化为数组
        let sk: string[] = s.split(",");
        // for循环禁用数组
        for (let i = 0; i < sk.length - 1; i ++) { 
            let num: number = Number(sk[i]);           
            this.btn_sl[num].interactable = false;
            cc.log("for循环中当前" + num);
        }
    }

    // 学习技能专用函数，num为学习第几个技能
    learn (num: number) {
        cc.log(num);
        // 获取数据
        let sk = cc.sys.localStorage.getItem("skill");
        // 增加数据
        let v = sk + num + ",";
        // 存储数据
        cc.sys.localStorage.setItem("skill", v);
        cc.log("学习完技能了，存储的数据为：" + v);

        // 检测并禁用按钮
        this.check_btn_inter();

        // 更新使用技能按钮的显示
        this.skill.update_skill_btn();


        // 获取金币
        let money = cc.sys.localStorage.getItem("money");
        // -2500金币
        let m = Number(money) - 2500;
        // 存储
        cc.sys.localStorage.setItem("money", m);


        // 获取任务金币数据
        let t_m = cc.sys.localStorage.getItem("Task_money");
        // 如果为空
        if (t_m == null) {
            // 存储
            cc.sys.localStorage.setItem("Task_money", 2500);
        } else {
            // 如果不为空
            // 加上2500
            let n = Number(t_m) + 2500;
            // 存储
            cc.sys.localStorage.setItem("Task_money", n);
        }
    }

    // 显示学习技能的面板
    open () {
        this.UI.active = true;
    }

    // 隐藏学习技能的面板
    close () {
        this.UI.active = false;
    }

}
